public class findDuplicate {
    public int findDuplicate(int[] nums) {
        //先观察可知,根据行走路线来看会在第二个重复的数循环，因此可以参考环形链表II解决
        //起点虚拟在-1位置
        int slow=0;
        int fast=nums[0];
        while (nums[slow]!=nums[fast]){
            slow=nums[slow];
            fast=nums[nums[fast]];
        }
        //特殊处理，fast相比-1，先走了一步，所以slow在环内应该也多走一步
        fast=0;
        slow=nums[slow];
        while (nums[fast]!=nums[slow]){
            fast=nums[fast];
            slow=nums[slow];
        }
        return nums[slow];
    }
}